Funções são Objetos de Primeira-Classe

Parte 1

Assuma que executamos as seguintes definições em Python:

def foo(x):
    return x + 'a'

bar = foo
biz = lambda x: x + 'b'

Quais são os valores das expressões a seguir? Insira error se um erro seria gerado.

foo('foo')


bar('foo')


biz('foo')


(lambda x: x + 'c')('foo')


[foo, bar, biz][2]('foo')

Parte 2

Assuma que executamos as seguintes definições em Python:

def makeSuffixer(suffix):
    def f(x):
        return x + suffix
    return f

a = makeSuffixer('a')

Quais são os valores das expressões a seguir? Insira error se um erro seria gerado.

a('b')


makeSuffixer('foo')('bar')